package co.edu.udea.impl;


import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Transactional;

import co.edu.udea.dao.UsuarioDao;
import co.edu.udea.model.Solicitud;
import co.edu.udea.model.Usuario;
import exceptions.ExecptionRTF;

/**
 * 
 * @author Cristina Isabel Mejia Gonzalez
 *
 */
public class UsuarioImp extends HibernateDaoSupport implements UsuarioDao {

	Logger log = Logger.getLogger(this.getClass());
	
	/**
	 * @param login, Metodo que permite verificar si un usuario existe
	 * @return devuelve true si el usuario existe o false en caso contrario
	 */
	public Usuario login(String login, String pass) throws ExecptionRTF{
		
		try {
			Usuario usuario = null;
			List<Usuario> usuarios =  getSession().createCriteria(Usuario.class)
					.add(Restrictions.eq("nombreUsuario", login))
					.add(Restrictions.eq("contraseniaUsuario", pass)).list();
			for (Usuario user : usuarios) {
				usuario = user;
			}
			
			return usuario;
		} catch (Exception e) {

			log.error("No se pudo identificar usuario", e); 
			throw new ExecptionRTF(e);
		}
	}
	
	/**
	 * @param user, Metodo que permite guadar un usuario nuevo
	 * @return devuelve el usuario si el proceso fue exitoso
	 */
	@Transactional
	public Usuario guardar(Usuario user) throws ExecptionRTF {
		try {
			Session session = getSessionFactory().openSession();  
			session.save(user);
			session.flush();
			return user;
		} catch (Exception e) {

			log.error("No se pudo guardar el usuario", e); 
			throw new ExecptionRTF(e);
		}
	}

	@Override
	public Usuario consultarUsuario(Usuario user) 
			throws ExecptionRTF {
		
		try {
			return getHibernateTemplate().get(Usuario.class, user.getIdentificacionUsuario());
		} catch (Exception e) {

			log.error("No se encontro usuario con codigo: "+user.getIdentificacionUsuario(), e); 
			throw new ExecptionRTF(e);
		}
		

	}

}
